package br.com.mtech.ctrlliberty.ejb.dao;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import br.com.mtech.ctrlliberty.clientjar.entity.CamposPesquisaVO;
import br.com.mtech.ctrlliberty.clientjar.entity.MensagemVO;
import br.com.mtech.ctrlliberty.clientjar.entity.TelefoneVO;
import br.com.mtech.ctrlliberty.clientjar.util.Util;

/**
 * Session Bean implementation class MensagemEJBDAO
 */
@Stateless
public class MensagemEJBDAO implements MensagemEJBDAOLocal {
	
	@PersistenceContext(unitName="CtrlLiberty")	
	EntityManager	entityManager;
	
	@Override
	public MensagemVO recuperar(Long id) {
		return entityManager.find(MensagemVO.class, id);
	}

	@Override
	public MensagemVO inserir(MensagemVO sms) {
		entityManager.persist(sms);
		return sms;
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<MensagemVO> pesquisarMensagens(TelefoneVO telefone, CamposPesquisaVO campos) {
		
		StringBuilder strQuery = new StringBuilder();
		
		strQuery.append("from MensagemVO sms ");
		strQuery.append("where sms.telefone = :tel ");
		strQuery.append("and sms.dataMensagem between :dataInicial and :dataFinal ");
		
		if(!Util.isEmpty(campos.getNumeroDDD())) {
			strQuery.append("and sms.numeroDDDRemoto = :numDDD ");
		}
		if(!Util.isEmpty(campos.getNumeroRemoto())) {
			strQuery.append("and sms.numeroRemoto = :numRemoto ");
		}
		if(!Util.isEmpty(campos.getDescricaoMensagem())) {
			strQuery.append("and sms.mensagem like :descricaoSMS ");
		}
		if(campos.getTipoLigSms() != null) {
			strQuery.append("and sms.tipoLigacao = :tipoSms ");
		}
	
		Query query = entityManager.createQuery(strQuery.toString());
		query.setParameter("dataInicial", campos.getDataInicial().getTime());		
		query.setParameter("dataFinal", campos.getDataFinal().getTime());
		query.setParameter("tel", telefone);
		
		if(!Util.isEmpty(campos.getNumeroDDD())) {
			query.setParameter("numDDD", campos.getNumeroDDD());
		}
		if(!Util.isEmpty(campos.getNumeroRemoto())) {
			query.setParameter("numRemoto", Long.parseLong(campos.getNumeroRemoto()));
		}
		if(!Util.isEmpty(campos.getDescricaoMensagem())) {
			query.setParameter("descricaoSMS","%" + campos.getDescricaoMensagem() + "%");
		}
		if(campos.getTipoLigSms() != null) {
			query.setParameter("tipoSms", campos.getTipoLigSms());
		}
		
		return query.getResultList();
	}

    

}
